package com.qcby.dao;

import com.qcby.entity.*;
import com.qcby.entity.Review;
import com.qcby.entity.User;
import com.qcby.entity.UserCheckin;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CheckingsDao {
    //通过用户名称获取用户id
    User getUserIdByName(String userName);

    //通过用户Id获取用户星系信息
    User findUserInfoByUserId(int userId);

    //通过用户id获取用户的打卡记录
    List<UserCheckin> getCheckinsByUserId(@Param("Uid") Integer Uid,@Param("shopId") Integer shopId);

    //通过打卡记录id获取打卡记录下的评论
    List<Review> getCommentsByCheckinId(int checkinId);

    //通过打卡记录里的userId获取用户信息
    User getUserInfoByUserId(int userId);
    Integer addCheckin(Checkings checkings);

    //通过父评论id获取子评论
    List<Review> getChildrenCommentsByParentId(int parentId);

    //对打卡记录添加评论
    int addComment(@Param("checkinId") int checkinId,
                   @Param("userId") int userId,
                   @Param("content") String content);

    //查找当前单个评论的评论数量
    int findCheckinReviewCount(@Param("checkinId") int checkinId);

    //在评论的同时更新评论数
    void updateCommentsCount(@Param("singleReviewCount") int singleReviewCount, @Param("checkinId") int checkinId);

    //对评论进行回复
    int replyComment(@Param("checkinId") int checkinId,
                     @Param("userId") int userId,
                     @Param("content") String content,
                     @Param("parentId") int parentId);

    //对打卡记录进行点赞
    int likeCheckin(@Param("checkinId") int checkinId,
                    @Param("userId") int userId);

    //点赞时修改打卡的点赞数量，操作加一
    void LikeUpdateCheckin(@Param("likeCount") int likeCount ,
                           @Param("checkinId") int checkinId);

    //查找当前的打卡的点赞数量
    int findLikeCount(@Param("checkinId") int checkinId);

    //撤销对打卡的点赞
    int cancelCheckinLike(@Param("checkinId") int checkinId,
                          @Param("userId") int userId);

    //撤销时修改打卡的点赞数量，操作减一
    int cancelLikeUpdateCheckin(@Param("likeCount") int likeCount ,
                                @Param("checkinId") int checkinId);

    //对打卡下的评论点赞
    void likeComment(@Param("commentId") int commentId,
                     @Param("userId") int userId);

    //点赞时修改评论点赞的数量，操作加一
    void LikeUpdateComment(@Param("likeCount") int likeCount ,
                           @Param("commentId") int commentId);

    //查找当前的评论的点赞数量
    int findCommentLikeCount(@Param("commentId") int commentId);

    //撤销对评论的点赞
    int cancelCommentLike(@Param("commentId") int commentId,
                           @Param("userId") int userId);

    //修改撤销评论点赞的数量，操作减一
    int cancelLikeUpdateComment(@Param("likeCount") int likeCount ,
                                @Param("commentId") int commentId);

    //查找用户点赞过了的打卡记录
    List<Integer> getUserLikedCheckins(@Param("userId") int userId);

    //查找用户点赞过了的打卡评论
    List<Integer> getUserLikedComments(@Param("userId") int userId,
                                       @Param("checkinId") int checkinId);

    // 更新分享状态
    int updateShareStatus(@Param("checkinId") int checkinId,
                          @Param("isShared") int isShared,
                          @Param("userId") int userId);

}
